home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / cprog.EXE / C6.TXT < prev    next >
Text File  |  1996-07-05  |  4KB  |  107 lines

  1. C Dili - 6. Konu
  2.  
  3. ================================================================
  4.  
  5. #define BASLA  0  /* Dongunun baslangic noktasi */
  6. #define BITIR  9  /* Dongunun bitis noktasi     */
  7. #define MAX(A,B)  ((A)>(B)?(A):(B))  /* Max makro tanimlanmasi */
  8. #define MIN(A,B)  ((A)>(B)?(B):(A))  /* Min makro tanimlanmasi */ 
  9.  
  10. main()
  11. {
  12. int index,mn,mx;
  13. int sayac  = 5;
  14.  
  15.    for (index = BASLA;index <= BITIR;index++) {
  16.       mx = MAX(index,sayac);
  17.       mn = MIN(index,sayac);
  18.       printf("Max simdi %d ve min de %d ..\n",mx,mn);
  19.    }
  20. }
  21.  
  22. ================================================================
  23.  
  24. Bu programda, ilk defa define lara ve makrolarla tanisacaksiniz. Ilk dort
  25. satirdaki "#define" sozcuklerine dikkat edin. Butun makrolar ve define'lar
  26. bu sekilde baslar. Derleme baslamadan, on-derleyici (preprocessor) bu
  27. tanimlari alir, ve programda bu sembolleri gercek degerleri ile
  28. degistirir. Ornegin, BASLA sembolunu heryerde sifir ile degistirir.
  29. Derleyicinin kendisi, bu BASLA yada BITIR sembollerini gormez bile.
  30.  
  31. Boyle ufak bir programda bu sekilde semboller tanimlamak luzumsuzdur,
  32. fakat ikibin satirlik bir programda, yirmiyedi yerde BASLA olsa idi,
  33. sayede #define'i degistirmek, programdaki rakamlari degistirmekten daha
  34. kolay olurdu. 
  35.  
  36. Ayni sekilde on-derleyici, BITIS sembolu gordugu heryere 9 rakamini
  37. koyar. 
  38.  
  39. C de alisilmis bir teknik de, BASLA yada BITIR gibi sembolik sabitlerin
  40. buyuk harfle, ve degisken isimlerinin de kucuk harfle yazilmasidir. 
  41.  
  42. MAKRO NEDIR ?
  43.  
  44. Makro, bir #define satirindan baska birsey degildir. Fakat icinde islemler
  45. yapabildigi icin, ona ozel bir isim verilmistir. Ornegin ucuncu satirda,
  46. iki rakamin hangisi buyukse onu donduren MAX isimli bir makro
  47. tanimliyoruz. Bundan sonra on-derleyici ne zaman MAX termini ve arkasindan
  48. parantezi gorurse, bu parantezlerin arasinda iki tane deger bulacagini
  49. farz eder, ve tanimda bulunan deyimi, buraya koyar.  Ornegin, onikinci
  50. satira gelindiginde, "A" yerine "index" ve "B" yerine de "sayac" konur.
  51.  
  52. Ayni sekilde "MIN" isimli makro da kendisine gecirilen iki rakamin
  53. hangisi daha kucukse, o degeri dondurur. 
  54.  
  55. Bu makrolarda bir suru fazlalik parantez goreceksiniz. Bunlarin nedeni,
  56. bir sonraki programda anlasilacak..
  57.  
  58. YALNIS BIR MAKRO
  59.  
  60. ================================================================
  61.  
  62.  
  63. #define HATALI(A)   A*A*A      /* Kup icin hatali makro */
  64. #define KUP(A)    (A)*(A)*(A)  /* Dogusu ...            */
  65. #define KARE(A)    (A)*(A)     /* Karesi icin dogru makro */
  66. #define START 1
  67. #define STOP  9
  68.  
  69. main()
  70. {
  71. int i,offset;
  72.  
  73.    offset = 5;
  74.  
  75.    for (i = START;i <= STOP;i++) {
  76.       printf("%3d in karesi %4d dir, ve kubu ise %6d dir..\n",
  77.               i+offset,KARE(i+offset),KUP(i+offset));
  78.  
  79.       printf("%3d in HATALIsi ise %6d dir.\n",i+offset,HATALI(i+offset));
  80.    }
  81. }
  82.  
  83. ================================================================
  84.  
  85. Ilk satira baktiginiza, HATALI isimli makronun bir rakamin kubunu
  86. aldigini goruyoruz. Gercektende, bu makro bazen dogru calismaktadir.
  87.  
  88. Programin kendisinde,i+offset 'in  KUP unun hesaplandigi yeri
  89. inceleyelim. Sayet i 1 ise, offset de 5 olduguna gore, 1+5 = 6 olacaktir.
  90. KUP isimli makroyu kullanirken, degerler:
  91.  
  92.     (1+5)*(1+5)*(1+5) = 6*6*6 = 216
  93.     
  94. olacaktir. Halbuki, HATALI yi kullanirsak, carpmanin onceligi, toplamadan
  95. fazla oldugundan, degerleri:
  96.  
  97.     1+5*1+5*1+5 = 1+5+5+5 = 16
  98.     
  99. seklinde buluyoruz. Yani, parantezler, degiskenleri dogru bir sekilde
  100. birbirinden ayrimak icin gereklidir. 
  101.  
  102. Programin gerisi basittir, ve sizin incelemenize birakilmistir.. 
  103.  
  104. ODEV:
  105.  
  106. 1. 7 den -5 e dogru sayan bir program yaziniz.
  107.